/**
 * Setvor project
 */
package setvor.lang.machine;

import java.util.Set;

import setvor.lang.Alfabet;
import setvor.lang.StringOf;

/**
 * @author julatec
 *
 */
public interface Automaton<Q, S> extends AbstractMachine {

	Set<Q> getStates();
	
	Set<Q> getFinalStates();
	
	Set<Q> getInitialState();
	
	Set<Q> analize(StringOf<S> string);
	
	boolean accept(StringOf<S> string);
	
	Set<Q> transition(Q state, S symbol);
	
	Set<Q> emptyTransition(Q state);
	
	boolean isFinite();
	
	boolean isDeterministic();
	
	boolean acceptEmptyString();
	
	Alfabet<S> getAlfabet();
	
}
